Using PS3 Control Pads via Bluetooth¶
Requirements¶
- A compatible Bluetooth USB adapter (see Tested Bluetooth adapters with QtSixA)
- At least one official Sony PlayStation 3 control pad
- A USB cable
Overview¶
The PES image includes a compiled version of the QtSixA daemon and utilities written by falkTX. At boot time the sixad
daemon will start-up providing the Bluetooth service has started.
Note
the sixad daemon will not start if a Bluetooth adapter is not present.
Pairing¶
As well as the sixad
daemon that translates input from the PlayStation 3 control pads via Bluetooth, the sixpair
utility is also installed. This allows a PlayStation 3 control pad to pair with your Bluetooth adapter when plugged in via USB. The PES image has been configured so that the sixpair
utility is automatically executed when a PlayStation 3 control pad is connected to the Raspberry Pi via USB.
To pair your PlayStation 3 control pad, first make sure your Raspberry Pi has booted and the PES GUI has loaded.
Now connect your PlayStation 3 control pad via USB to your Raspberry Pi. The four red LEDs on the control pad should now flash to indicate that it is charging. Wait at least three seconds before unplugging the control pad.
Next press the PlayStation button on the control pad and after a few seconds the control pad should pair with your Raspberry Pi. The control pad will vibrate for a few seconds and the LED corresponding to player 1 should illuminate.
Warning
If after vibrating all four LEDs light up and PES reports no joysticks connected, then the sixad
daemon either doesn’t recognise your control pad or your Bluetooth adapter is not compatible.
Finally, repeat for any additional control pads.
Note
once paired, you do not need to repeat this procedure unless you pair your control pads with another Bluetooth device
Turning Off Control Pads¶
A PlayStation 3 control pad can be turned off by holding down the PS3 button on the control pad until the red LEDs go off. This usually takes 12 seconds. Alternatively, turning off your Raspberry Pi will also cause the control pads to turn off afterwards.
Bluetooth Troubleshooting¶
Is the Bluetooth adapter running?
Use the hciconfig
command to list any Bluetooth adapters that have been connected, e.g.:
[root@alarmpi arch]# hciconfig
hci0: Type: BR/EDR Bus: USB
BD Address: 00:0F:3B:81:B2:0D ACL MTU: 1017:5 SCO MTU: 64:0
UP RUNNING PSCAN
RX bytes:1638756 acl:28296 sco:0 events:104 errors:0
TX bytes:3874 acl:111 sco:0 commands:26 errors:0
If no devices are listed, then try power-cycling your Raspberry Pi. If after a reboot the adapter is still not listed try executing as root:
sudo hciconfig hci0 up
Bluetooth adapter is up but will not pair
Run the hciconfig
command as root. If the adapter is listed as up but you do not see RUNNING PSCAN
in the output run the following command to force the adapter to go into pairing mode:
sudo hciconfig hci0 pscan
Bluetooth adapter is up and running pscan but the control pad will not pair
Try connecting the control pad again via USB. If it still does not pair please check that you are using an official Sony PlayStation 3 control pad.
You can also try to pair the control pad manually when it is plugged in via USB by running (as root):
sudo /opt/qtsixad/sbin/sixpair
This command will report the MAC address of the Bluetooth adapter that the control pad has been paired to. If successful, the MAC address reported should match the MAC address shown by the hciconfig
command. If it does not, then the pairing has failed.
Tested Bluetooth adapters with QtSixA¶
The following Bluetooth adapters have been tested with PES successfully. If you know of any others, I would be interested to know.
The following Bluetooth adapters fail to work with PES due to compatibility issues with the QtSixA daemon, but do work with Bluez (see below) instead:
Using Bluez instead of QtSixA¶
If your PlayStation 3 control pads will not connect you may want to try using the Bluez Linux libraries instead. So far I have yet to find a Bluetooth adapter that will not work with this library, but it doesn’t have the support for LEDs on the control pads and getting the control pads to be trusted by the adapter can be fiddly. I hope to automate this in the near future.
To use Bluez instead, please proceed as follows:
- Log into your Raspberry Pi either via SSH or using a keyboard at the console.
- Stop the sixad daemon:
sudo systemctl stop sixad.service
- Disable/enable services:
sudo systemctl disable sixad.service
sudo systemctl enable bluetooth.service
- Edit
/etc/udev/rules.d/97-sixpair.rules
and put a comment character (i.e. a “#”) at the beginning of the line in the file or remove the file entirely if you want. This file makes the control pads auto pair but it also stops them from working via USB. - Power off the system and disconnect the power cable - do not reboot:
sudo poweroff
- Power on the system (reconnect power cable).
- If you have not already paired your control pads previously using sixpair, then do so now by connecting your control pad via USB and then run:
sudo /opt/qtsixad/sbin/sixpair
Repeat for any additional control pads.
- Make sure all control pads are disconnected.
- Run the
bluetoothctl
command as a normal user, i.e.
bluetoothctl
- Connect a PlayStation 3 control pad via USB. You will se some messages at the console stating that a new control pad has been detected.
- At the
bluetoothctl
prompt type “devices” and you should see your PlayStation 3 control pad listed. Take a note of the MAC. - At the bluetoothctl prompt type:
agent on
trust MAC
where MAC is the MAC of your control pad.
- Now disconnect your control pad and press the PS3 button on it. At this point you should see a series of messages saying that the control pad has connected. You can check by looking for a
/dev/input/js*
entry.
E.g.
ls -l /dev/input
- Repeat for any additional control pads.